#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
编写一个装饰器名称为required_ints, 实现对参数的类型检查。注意命名规范并在适当位置添加合理注释
具体要求
1)确保函数接收到的每一个参数都是整数
2)required_ints为通用装饰器 可以装饰带任意数量的参数和带返回值的函数
3)如果参数不是整形数， 抛出异常raise TypeError(“参数必须为整形”)
4)实现带不定长参数并带返回值的my_add函数并用装饰器装饰。功能：计算所有传入参数的和。 例：my_add(1,2,3,65,67,5,a=1,b=2)
5)调用my_add函数并打印结果
'''

def required_ints(fn):
    def wrapper(*args, **kwargs):
        for arg in args:
            if not isinstance(arg, int):
                raise TypeError("参数必须为整形")
        for k, v in kwargs.items():
            if not isinstance(v, int):
                raise TypeError("参数必须为整形")
        return fn(*args, **kwargs)
    return wrapper


@required_ints
def my_add(*args, **kwargs):
    my_args = list(args)
    for i in kwargs:
        my_args.append(kwargs[i])
    
    return sum(my_args)


print(my_add(1,2,3,65,67,5, 10,a=1,b=2,c=2))
